package homeWork_04;

import java.util.Arrays;

public class Work1 {
    public static void main(String[] args) {

        //第一题
        int[] array = {10,20,30,40,50};
        print(array);
        //第二题
        System.out.println(Arrays.toString(copy("neusofteducation")));
        //第三题
        test3();
        //第四题
        int [][] array1 = test4();
        for(int i = 0;i < array1.length; i++){
            for(int j = 0;j < array1[i].length; j++){
                System.out.print(array1[i][j]+"\t");
            }
            System.out.println();
        }

        //第五题
        test5();
        //第六题
        test6();
        //第七题
        int[] array2 = {2,1,6,4,8,4,3};
        sort(array2);
        System.out.println(Arrays.toString(array2));

        //第八题
        int[] array3 = {1,1,2,4,2,42,4};
        test8(array3);
        System.out.println(Arrays.toString(array3));

        //第九题
        test9();
    }

    //第一题,编写一个简单程序，要求数组长度为5，分别赋值10，20，30，40，50，在控制台输出该数组的值。
    public static void print(int[] array){
        System.out.println(Arrays.toString(array));
    }

    //第二题 将一个字符数组的值（neusofteducation）拷贝到另一个字符数组中。
    public static char[] copy(String s){
        char [] c = s.toCharArray();
        return Arrays.copyOf(c,c.length);
    }
    //第三题 给定一个有9个整数（1,6,2,3,9,4,5,7,8）的数组，先排序，然后输出排序后的数组的值。
    public static void test3(){
        int [] array = {1,6,2,3,9,4,5,7,8};
        Arrays.sort(array);
        System.out.println(Arrays.toString(array));
    }
    //第四题 按照如下方式进行运算。生成一个2行4列的数组。
    // 此数组的第1行1列是2*1+3*5+4*2第1行2列是2*5+3*9+4*7 第2行1列是4*1+6*5+8*2 依次类推。
    public static int[][] test4(){
        int [][] array = new int[2][4];
        for(int i = 0;i < array.length;i++){
            for(int j = 0;j < array[i].length;j++){
                if( i == 0){
                    if( j == 0){
                        array[i][j] = 2 * 1+3 * 5+4 * 2;
                    }else if( j == 1){
                        array[i][j] = 2 * 5+3 * 9+4 * 7;
                    }else if( j == 2){
                        array[i][j] = 2 * 2+3 * 10+4 * (-5);
                    }else {
                        array[i][j] = 2 * 8+3 * (-3)+4 * (-18);
                    }
                }else{
                    if( j == 0){
                        array[i][j] = 4 * 1+6 * 5+4 * 2;
                    }else if( j == 1){
                        array[i][j] = 4 * 5+6 * 9+8 * 7;
                    }else if( j == 2){
                        array[i][j] = 4 * 2+6 * 10+8 * (-5);
                    }else {
                        array[i][j] = 4 * 8+6 * (-3)+8 * (-18);
                    }
                }
            }
        }
        return array;
    }

    //第五题  输出一个double型二维数组（长度分别为5、4，值自己设定）的值。
    public static void test5(){
        double[][] array = new double[5][4];
        double temp = 1.0;
        StringBuffer sb = new StringBuffer();
        sb.append("[");
        for(int i = 0;i < array.length;i++){
            sb.append("{");
            for(int j = 0;j < array[i].length;j++){
                array[i][j] = temp;
                sb.append(array[i][j] + " ");
                temp++;
            }
            sb.append("}");
        }
        sb.append("]");
        System.out.println(sb.toString());
    }

    //第六题 在一个有8个整数（18，25，7，36，13，2，89，63）的数组中找出其中最大的数及其下标。
    public static void test6(){
        int[] array = {18,25,7,36,13,2,89,63};
        int max = 0;
        int[] index = new int[8];
        int flag = 0;
        for(int i = 0;i < array.length; i++){
            if( max == array[i]){
                flag++;
                index[flag] = i;
            }else if(max < array[i]){
                max = array[i];
                flag = 0;
                index[flag] = i;
            }
        }
        System.out.println("最大值为"+max+",下标值为"+printArray(index));
    }
    public static String printArray(int [] array){
        StringBuffer sb = new StringBuffer();
        for(int i = 0;i < array.length;i++){
            if(array[i] != 0){
                sb.append(array[i]+" ");
            }
        }
        return sb.toString();
    }

    //第七题 将一个数组中的元素逆序存放。
    public static void sort(int[] array){
        for(int i = 0;i < array.length;i++){
            for(int j = 0;j < array.length - i - 1;j++){
                if(array[j] < array[j + 1]){
                    array[j] = array[j] + array[j + 1];
                    array[j + 1] = array[j] - array[j + 1];
                    array[j] = array[j] - array[j + 1];
                }
            }
        }
    }

    //第八题  将一个数组中的重复元素保留一个其他的清零。
    public static void test8(int [] array){
        for(int i = 0; i < array.length;i++){
            for(int j = i + 1; j < array.length;j++){
                if(array[i] == array[j]){
                    array[i] = 0;
                }
            }
        }
    }

    //第九题 给定一维数组{ -10，2，3，246，-100，0，5} ，计算出数组中的平均值、最大值、最小值
    public static void test9(){
        int[] array = {-10,2,3,246,-100,0,5};
        int sum = 0;
        int min = array[0];
        int max = 0;
        for(int i = 0; i < array.length;i++){
            sum += array[i];
            if(min > array[i]){
                min = array[i];
            }else if(max < array[i]){
                max = array[i];
            }
        }
        int avg = sum/array.length;
        System.out.println("最大值"+max+",平均值"+avg+",最小值"+min);
    }

}
